package win.larryzeal.threadpool;

import java.util.List;

/**
 * 自定义线程池。来自咕泡学院公开课。
 * <p>
 * Created by LarryZeal on 2017/9/19.
 */
public interface ThreadPool {
    /**
     * 执行一个任务。
     *
     * @param task
     */
    void execute(Runnable task);

    /**
     * 执行一个任务数组。
     *
     * @param tasks
     */
    void execute(Runnable[] tasks);

    /**
     * 执行一个任务列表。
     *
     * @param tasks
     */
    void execute(List<Runnable> tasks);

    /**
     * 返回可以执行任务的个数
     *
     * @return
     */
    int getExecuteTaskNumber();

    /**
     * 返回任务队列的长度，即还没有被处理的任务个数。
     *
     * @return
     */
    int getWaitTaskNumber();

    /**
     * 返回工作线程的个数
     *
     * @return
     */
    int getWorkThreadNumber();

    /**
     * 在所有任务结束后，关闭线程池。
     */
    void shutdown();

}
